home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 2
/
Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso
/
Aminet
/
misc
/
amag
/
sh9302a.lha
/
Taktzyklen (S.51)
/
taktik.s
< prev
next >
Wrap
Text File
|
1993-06-06
|
4KB
|
147 lines
;******** Taktzyklen bestimmen *********
;*-------------------------------------*
;* Prog.name: taktik.s *
;*-------------------------------------*
;* Autor: Gerald Steffens *
;* Copyright: bei mir *
;* Assembler: A68k *
;* Hardware: 512K,Kickstart1.2 *
;***************************************
ExecBase: equ 4
OldOpenLibrary: equ -408
CloseLibrary: equ -414
Output: equ -60
Write: equ -48
Disable: equ -120
Enable: equ -126
RawDoFmt: equ -522
Umlauf: equ 99 ; für 100 Umläufe
start: equ 0 ; Register d6 läuft
ende: equ 20 ; von start bis ende
; hängt die Testschleife nicht von d6 ab, so reicht start=ende=0
;***** hier beginnt der Spaß *****
move.l ExecBase,a6 ; es wird
lea dosname,a1 ; die Dos-Library
jsr OldOpenLibrary(a6); geöffnet
move.l d0,dosbase ; ging alles gut
beq abgang ; nein, dann Abgang
move.l d0,a6 ; DosBase
jsr Output(a6) ; Output-handle
move.l d0,handle ; Ausgabe-Datei
move.l #start,count
loop:
move.l ExecBase,a6 ; Interrupts
jsr Disable(a6) ; sperren
warte:
move.l $dff004,d7 ; um ein Flackern
andi.l #$0001ffff,d7 ; des Monitor zu
lsr.l #8,d7 ; unterbinden wird
cmpi.l #310,d7 ; auf Zeile 310
bne.s warte ; gewartet
move #$0200,$dff096 ; DMA aus
move.l count(pc),d6 ;
move #Umlauf,d7
lea $bfd000,a6 ; Hardwarebasis
move.b #$00,$e00(a6) ; Timer A stop
move.b #$ff,$400(a6) ; Low
move.b #$ff,$500(a6) ; High und speichern
move.b #$01,$e00(a6) ; start
;************* Testschleife *************
;* *
;* d0-d5 und a0-a6 *
;* stehen zur freien Verfügung *
;* d6 durchläuft die Werte start - ende *
;* d7 nicht benutzen, weil Zähler *
;****************************************
testloop:
;*** hier Testbefehle einfügen ***
mulu d6,d0
; weitere interessante Befehle und passende Werte
; mulu #640,d0 ; 0-0
; bset d6,d0 ; 0-20
; lsl d6,d0 ; 0-70
; move.b $bfdd00,d0
;*********************************
dbra d7,testloop
lea $bfd000,a6
move.b #$00,$e00(a6) ; Timer A stop
move $500(a6),d7 ; High holen
move.b $400(a6),d7 ; Low holen
move #$8200,$dff096 ; DMA ein
movem.l d0-d5/a0-a6,-(a7) ; sichern
move.l ExecBase,a6 ; Interrupts
jsr Enable(a6) ; erlauben
addi #107,d7 ; Zeit einer Leerschleife
neg d7 ;
add #2,d7 ; Korrektur ( Rundung )
ext.l d7
divu #10,d7 ; Taktzahl justieren
lea datas,a1 ; Puffer für die Werte
move.l count(pc),(a1)+ ; Zählerwert
ext.l d7 ; und
move.l d7,(a1) ; Taktzahl
; eintragen
move.l ExecBase,a6
lea formatstr(pc),a0 ; Formatstring
lea datas(pc),a1 ; Data-Puffer
lea prog(pc),a2 ; Hilfsroutine
lea buffer(pc),a3 ; Ausgabepuffer
jsr RawDoFmt(a6) ; Werte verarbeiten
move.l handle(pc),d1 ; Output-handle
move.l #buffer,d2 ; Ausgabepuffer
move.l textend(pc),d3
sub.l #buffer,d3 ; textlänge
move.l dosbase(pc),a6
jsr Write(a6) ; Text ausgeben
movem.l (a7)+,d0-d5/a0-a6 ; restaurieren
addq.l #1,count ; Zähler + 1
move.l count(pc),d6 ;
cmpi.l #ende,d6 ; Zähler<=ende?
ble loop ; weiter->
move.l dosbase(pc),a1 ; Dos-Library
move.l ExecBase,a6 ; wieder
jsr CloseLibrary(a6) ; schließen
abgang:
moveq #0,d0
rts
; *** Hilfsroutine *** wird von RawDoFmt aufgerufen
prog:
move.b d0,(a3)+
clr.b (a3)
move.l a3,textend
rts
count: dc.l 0
dosbase: dc.l 0
handle: dc.l 0
textend: dc.l 0
datas: dc.l 0
dc.l 0
buffer: ds.b 100
dosname: dc.b "dos.library",0
even
formatstr: dc.b "nr: %8ld takte= %5ld",10,0
end